#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>

using namespace std;

long long f[ 1001 ][ 1001 ], c[ 1001 ][ 1001 ];

void init( )
{
    int i, j;
    for ( i = 1; i <= 1000; i++ )
    {
        f[ i ][ 1 ] = f[ i ][ i ] = 1;
        for ( j = 2; j < i; j++ )
            f[ i ][ j ] = ( f[ i - 1 ][ j ] * j + f[ i - 1 ][ j - 1 ] ) % 1000000007;
    }
    for ( i = 0; i <= 1000; i++ )
    {
        c[ i ][ 0 ] = 1;
        for ( j = 1; j <= i; j++ )
            c[ i ][ j ] = ( c[ i - 1 ][ j ] + c[ i - 1 ][ j - 1 ] ) % 1000000007;
    }
}

int main( )
{
    int n, r, k, i, m;
    long long s;
    init( );
    while ( scanf("%d%d%d%d", &n, &r, &k, &m) != EOF )
    {
        k--;
        if ( n - ( r - 1 ) * k < r )
            puts("0");
        else
        {
            s = 0;
            for ( i = 1; i <= m; i++ ) s = ( s + f[ r ][ i ] ) % 1000000007;
            printf("%lld\n", c[ n - ( r - 1 ) * k ][ r ] * s % 1000000007);
        }
    }
    return 0;
}
